The present invention relates to a control apparatus, a control program, and a control method for controlling data.
With the recent widespread use of multi-thread CPUs or multi-core CPUs and recent increases in the number of CPUs included in a server, the number of hardware threads simultaneously executable on a server is increased. For example, even an entry server can realize 64 hardware threads. In order to centrally control data on a server, shared data accessible from each of multiple hardware threads is used.
If each thread simultaneously accesses the shared data using exclusive control, the integrity of the shared data is maintained. However, if the number of hardware threads is increased, exclusive control over the shared data performed by one hardware thread is apt to compete with that performed by other hardware threads. This causes a bottleneck. Specifically, other threads attempting to access the shared data must wait when one thread is performing exclusive control on the shared data. Also, an overhead for handling such a competition is increased.
Among examples of such an overhead are a CPU time consumed when one thread spin-waits until compare and swap succeeds and a processing time taken until a library or the OS generates a queue of threads. There has been proposed “non-blocking hash map” as a data structure that allows efficient control of shared data. Below are examples of a proposed non-blocking hash map data structure.
Cliff Click, “A Lock-Free Hash Table”, [online], 2007-05-08, AZUL SYSTEMS, retrieved from the Internet on 2008-10-03, <URL: http://www.azulsystems.com/events/javaone—2007/2007_LockFreeHash.pdf>
Cliff Click, “A Lock-Free Wait-Free Hash Table”, [online], 2007-02-21, Stanford University Computer Systems Laboratory EE380 Colloquium, retrieved from the Internet on 2008-10-03, <URL: http://www.stanford.edu/class/ee380/Abstracts/070221.html>
Cliff Click, “A Fast Lock-Free Hash Table”, [online], 2007-02-21, JavaOne Online Technical Sessions, retrieved from the Internet on 2008-10-03, <URL: http://developers.sun.com/learning/javaoneonline/2007/pdf/TS-2862.pdf>
Among examples of the usage of shared data is registration of new data, deletion of the registered data, and listing of the registered data, each of which is performed by each of multiple threads. For example, if a server receives an access request from an external apparatus, the server registers information about the access request as shared data, deletes the information when the access is completed, and lists all the registered accesses so as to process the accesses. If an application is executed where a great number of hardware threads frequently register and/or delete data there is a need to realize high throughput and scalability with respect to the registration and/or deletion of data.